package me.sdau.spider.manager.common.utils;

import com.google.common.base.Strings;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

/**
 * MD5 工具类
 */
public class MD5Util {

    /**
     * MD5 普通加密
     * @param source 原文
     * @return
     */
    public static String encrypt(String source) {
        return encrypt(source,"");
    }

    /**
     * MD5 盐值加密
     * @param source 原文
     * @param salt 盐
     * @return
     */
    public static String encrypt(String source, String salt) {
        byte[] digest = getBytes(source, salt);
        return toHex(digest);
    }

    /***
     * 进行 MD5 加密
     * @param source 原文
     * @param salt 盐
     * @return
     */
    private static byte[] getBytes(String source, String salt){
        try {
            MessageDigest instance = MessageDigest.getInstance("MD5");
            if (!Strings.isNullOrEmpty(salt)) {
                instance.update(source.getBytes("UTF8"));
            }
            return instance.digest(source.getBytes("UTF8"));
        } catch (Exception e) {
            throw new RuntimeException("String 转化 MD5 失败！",e );
        }
    }

    /**
     * 转化为 16 进制字符串
     * @param digest 字符数字
     * @return
     */
    private static String toHex(byte[] digest) {
        StringBuilder builder = new StringBuilder();
        for (byte b : digest) {
            builder.append(Integer
                    .toHexString((0x000000FF & b) | 0xFFFFFF00)
                    .substring(6));
        }
        return builder.toString();
    }

}
